package main

// 序列化：结构体数据--》 json格式；反之是反序列化
 
import (
	"encoding/json"
	"fmt"
)

type Student struct {
    ID    int    `json:"id"`
    Gender string `json:"gender"`
    name   string // 小写，私有属性不能被json包访问
    Snum   string `json:"snum"`
}

func main() {
	var s1 = &Student{
		ID: 1,
		Gender: "male",
		name: "jhon",
		Snum: "s001",
	}
	fmt.Println(s1)
	
	strByte, err := json.Marshal(s1) //json.Marshal 函数用于将 Go 的值（通常是结构体或切片等）转换成 JSON 格式的字节切片 ([]byte)
	if err != nil {
	  fmt.Println(err)
	}
	fmt.Println(string(strByte)) //string 函数用于将一个字节切片（[]byte）转换为字符串（string 类型）
	
	
	// 反序列化
	str := string(strByte)
	var s2 = &Student{}
	fmt.Println(s2)
	err = json.Unmarshal([]byte(str), s2)
	if err != nil {
	 	fmt.Println(err)
	}
	fmt.Println(s2)
	
}
